    // int LastRemaining_Solution(int n, int m) {
    //     std::vector<int> children(n);
    //     for (int i = 0; i < n; ++i) {
    //         children[i] = i; // 初始化小朋友的编号
    //     }

    //     int index = 0; // 开始报数的小朋友的索引
    //     while (children.size() > 1) {
    //         index = (index + m - 1) %
    //                 children.size(); // 找到要出局的小朋友的索引
    //         children.erase(children.begin() + index); // 小朋友出局
    //     }
    //     return children[0]; // 返回最后剩下的小朋友的编号
    // }

    int LastRemaining_Solution(int n, int m) {
        list<int> lt;
        lt.assign(n, 0);
        int i = 0;
        for (auto& e : lt) {
            e = i++;
        }

        auto iter = lt.begin();
        while (lt.size() != 1) {
            int step = (m - 1) % lt.size();
            for (int i = 0; i < step; i++) {
                iter++;
                if (iter == lt.end()) {
                    iter = lt.begin();
                }
            }
            iter = lt.erase(iter);
            if (iter == lt.end()) {
                iter = lt.begin();
            }
        }

        return *lt.begin();
    }